package br.com.lopes.gci.controller;

import static br.com.lopes.gci.util.Constants.SCOPE_REQUEST;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;

import br.com.lopes.gci.annotation.ManagedBean;
import br.com.lopes.gci.exception.ManagerException;
import br.com.lopes.gci.manager.DominioManager;
import br.com.lopes.gci.manager.FuncionarioManager;
import br.com.lopes.gci.model.Dominio;
import br.com.lopes.gci.model.Funcionario;
import br.com.lopes.gci.model.Perfil;
import br.com.lopes.gci.util.Constants;

@ManagedBean
@Scope(SCOPE_REQUEST)
public class CombosController {
	
	public static final Logger log = Logger.getLogger(CombosController.class);
	
	@Autowired
	private DominioManager dominioManager;
	@Autowired
	private FuncionarioManager funcionarioManager;
	
	private List<SelectItem> listaDiretores;
	private List<SelectItem> listaGerentes;
	private List<SelectItem> listaFuncionariosSecretariaVenda;
	private List<SelectItem> listaStatus;
	private List<SelectItem> listaPerfil;
	private List<SelectItem> listaSexo;
	private List<SelectItem> listaTipoPessoa;
	private List<SelectItem> listaEstadoCivil;
	private List<SelectItem> listaMeioContato;
	private List<SelectItem> listaTipoVeiculo;
	private List<SelectItem> listaStatusCliente;
	private List<SelectItem> listaStatusVenda;
	private List<SelectItem> listaAtividadeVenda;
	private List<SelectItem> listaStatusUnidade;
	private List<SelectItem> listaTipoUnidade;
	private List<SelectItem> listaStatusPagamento;
	private List<SelectItem> listaStatusEmpreendimento;
	private List<SelectItem> listaTurnoEscala;
	
	public List<SelectItem> getStatusEmpreendimentoSelectItem(){
		if(listaStatusEmpreendimento != null){
			return listaStatusEmpreendimento;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS_EMPREENDIMENTO);
			listaStatusEmpreendimento = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatusEmpreendimento.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatusEmpreendimento;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getStatusPagamentoSelectItem(){
		if(listaStatusPagamento != null){
			return listaStatusPagamento;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS_PAGAMENTO);
			listaStatusPagamento = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatusPagamento.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatusPagamento;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getAtividadesVendaSelectItem(){
		if(listaAtividadeVenda != null){
			return listaAtividadeVenda;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_ATIVIDADE_VENDA);
			listaAtividadeVenda = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaAtividadeVenda.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaAtividadeVenda;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getStatusVendaSelectItem(){
		if(listaStatusVenda != null){
			return listaStatusVenda;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS_VENDA);
			listaStatusVenda = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatusVenda.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatusVenda;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getStatusSelectItem(){
		if(listaStatus != null){
			return listaStatus;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS);
			listaStatus = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatus.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatus;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getPerfilSelectItem(){
		if(listaPerfil != null){
			return listaPerfil;
		}
		try{
			List<Perfil> lista = funcionarioManager.getPerfis();
			listaPerfil = new ArrayList<SelectItem>();
			for(Perfil perfil : lista){
				listaPerfil.add(new SelectItem(perfil.getCodigo(), perfil.getDescricao()));
			}
			return listaPerfil;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getGerentesSelectItem(){
		try{
			List<Funcionario> lista = funcionarioManager.getFuncionarioByPerfil(Constants.PERFIL_GERENTE);
			listaGerentes = new ArrayList<SelectItem>();
			for(Funcionario funcionario : lista){
				listaGerentes.add(new SelectItem(funcionario.getCodigo(), funcionario.getNome()));
			}
			return listaGerentes;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getDiretoresSelectItem(){
		try{
			List<Funcionario> lista = funcionarioManager.getFuncionarioByPerfil(Constants.PERFIL_DIRETOR);
			listaDiretores = new ArrayList<SelectItem>();
			for(Funcionario funcionario : lista){
				listaDiretores.add(new SelectItem(funcionario.getCodigo(), funcionario.getNome()));
			}
			return listaDiretores;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getFuncionariosSecretariaVendaSelectItem(){
		try{
			List<Funcionario> lista = funcionarioManager.getFuncionarioByPerfil(Constants.PERFIL_SECRETARIA_VENDA);
			listaFuncionariosSecretariaVenda = new ArrayList<SelectItem>();
			for(Funcionario funcionario : lista){
				listaFuncionariosSecretariaVenda.add(new SelectItem(funcionario.getCodigo(), funcionario.getNome()));
			}
			return listaFuncionariosSecretariaVenda;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getSexoSelectItem(){
		if(listaSexo != null){
			return listaSexo;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_SEXO);
			listaSexo = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaSexo.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaSexo;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getTipoPessoaSelectItem(){
		if(listaTipoPessoa != null){
			return listaTipoPessoa;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_TIPO_PESSOA);
			listaTipoPessoa = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaTipoPessoa.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaTipoPessoa;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getEstadoCivilSelectItem(){
		if(listaEstadoCivil != null){
			return listaEstadoCivil;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_ESTADO_CIVIL);
			listaEstadoCivil = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaEstadoCivil.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaEstadoCivil;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getMeioContatoSelectItem(){
		if(listaMeioContato != null){
			return listaMeioContato;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_MEIO_CONTATO);
			listaMeioContato = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaMeioContato.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaMeioContato;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getTipoVeiculoSelectItem(){
		if(listaTipoVeiculo != null){
			return listaTipoVeiculo;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_TIPO_VEICULO);
			listaTipoVeiculo = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaTipoVeiculo.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaTipoVeiculo;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getStatusClienteSelectItem(){
		if(listaStatusCliente != null){
			return listaStatusCliente;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS_CLIENTE);
			listaStatusCliente = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatusCliente.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatusCliente;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getStatusUnidadeSelectItem(){
		if(listaStatusUnidade != null){
			return listaStatusUnidade;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_STATUS_UNIDADE);
			listaStatusUnidade = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaStatusUnidade.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaStatusUnidade;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getTipoUnidadeSelectItem(){
		if(listaTipoUnidade != null){
			return listaTipoUnidade;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_TIPO_UNIDADE);
			listaTipoUnidade = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaTipoUnidade.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaTipoUnidade;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public List<SelectItem> getListaTurnoEscala(){
		if(listaTurnoEscala != null){
			return listaTipoUnidade;
		}
		try{
			List<Dominio> listaDominios = dominioManager.getDominiosByConstraint(Constants.CONSTRAINT_TURNO_ESCALA);
			listaTurnoEscala = new ArrayList<SelectItem>();
			for(Dominio dominio : listaDominios){
				listaTurnoEscala.add(new SelectItem(dominio.getCodigo(), dominio.getNome()));
			}
			return listaTurnoEscala;
		} catch (ManagerException e){
			e.printStackTrace();
			return null;
		}
	}
}
